//
//  BaseModel.swift
//  GreenLight
//
//  Created by ZWJY on 2022/7/29.
//

import UIKit
import HandyJSON
/*
 1，class 是引用类型，值得传递过程中是（浅拷贝），struct是值类型，值得传递过程中是（深拷贝）
 2，class 可以继承，struct不可以
 3，struct修改实例方法中修改属性时需要加上mutating
 4，class 每个成员变量都需要初始化，struct不需要，编译器会自动生成init，并附一个默认值
 */
//MARK: - json 转模型使用
class BaseModel: NSObject, HandyJSON{
    required override init() {}
    func didFinishMapping() {
    }
}

//MARK: - BaseTableViewCell 相关配置
protocol TableViewModelConfig: NSObjectProtocol {
    /// 分割线颜色
    var lineColor: UIColor? { get }
    /// 左边间距
    var leftMargin: CGFloat { get }
    /// 右边间距
    var rightMargin: CGFloat { get }
    /// 顶部分割线
    var showTopLine: Bool { get }
    /// 底部分割线
    var showBottomLine: Bool { get }
    /// 分割线高度
    var lineHeight: CGFloat { get }
    /// 重用标识
    var reuseIdentifier: String { get }
    /// cell 高度
    var heightForRow: CGFloat { get }
    /// cell点击
    func didSelectRowAt(indexPath: IndexPath)
}

//MARK: - BaseTableViewCell 配合使用
class BaseTableViewCellModel: BaseModel, TableViewModelConfig{
    
    var lineColor: UIColor? {
        return .gray
    }

    var showTopLine: Bool {
        return false
    }

    var showBottomLine: Bool {
        return false
    }

    var leftMargin: CGFloat {
        return 0.0
    }

    var rightMargin: CGFloat {
        return 0.0
    }

    var lineHeight: CGFloat {
        return 1.0
    }

    var reuseIdentifier: String {
        return ""
    }

    var heightForRow: CGFloat {
        return 50.0
    }

    func didSelectRowAt(indexPath: IndexPath) {

    }
}

//MARK: - BaseCollectionViewCell 相关配置
protocol CollectionViewModelConfig: NSObjectProtocol {
    /// 重用标识
    var reuseIdentifier: String { get }
    /// cell 高度
    var sizeForItem: CGSize { get }
    /// cell点击
    func didSelectItemAt(indexPath: IndexPath)
}

//MARK: - BaseCollectionViewCell 配合使用
class BaseCollectionViewCellModel: BaseModel, CollectionViewModelConfig {
    var reuseIdentifier: String {
        return ""
    }

    var sizeForItem: CGSize {
        return .zero
    }

    func didSelectItemAt(indexPath: IndexPath) {

    }
}
